home *** CD-ROM | disk | FTP | other *** search
/ Resource for Source: C/C++ / Resource for Source - C-C++.iso / codelib9 / v_11_11 / janzen / fam2.hpp < prev    next >
C/C++ Source or Header  |  1995-11-01  |  3KB  |  145 lines

  1. EXAMPLE THREE (3):
  2.  
  3. #include <iostream.h>
  4. #include <math.h>
  5. #include <stdlib.h>
  6.  
  7. class fam_2
  8. {
  9.     private:
  10.         int set_qty,
  11.             set_len;
  12.         fzy_set **fam_data;
  13.     public:
  14.         fam_2(const int, const int);
  15.         inline ~fam_2(void);
  16.         fam_2(const fam_2&);   // copy constructor
  17.         fam_2& operator=(const fam_2&); // assignment
  18.         fzy_set& operator[](const int);
  19.         fzy_set& operator[](const int) const;
  20.         friend ostream& operator<<(ostream& os, 
  21.                                    fam_2& z);
  22.         friend fzy_set operator*(const fzy_set &, 
  23.                                  const fam_2 &);
  24. };
  25.  
  26. fam_2::fam_2(const int setqty = 1, 
  27.              const int setlen = 1)
  28. {
  29.     if ((setqty < 1) || (setlen < 1))
  30.     {
  31.         cout << "fam dimensions less than 1: " 
  32.              << setqty << ' ' 
  33.              << setlen << '\n';
  34.     }
  35.     else
  36.     {
  37.         set_qty = setqty;
  38.         set_len = setlen;
  39.         fam_data = new class fzy_set*[set_qty];
  40.         // check for failure of new
  41.         for (int i = 0; i < set_qty; i++)
  42.         {
  43.             fam_data[i] = new fzy_set(set_len);
  44.         }
  45.     }
  46.     return;
  47. }
  48.  
  49. inline fam_2::~fam_2(void)
  50. {
  51.     for (int i = 0; i < set_qty; i++)
  52.     {
  53.         delete fam_data[i];
  54.     }
  55.     delete[] fam_data;
  56.     return;
  57. }
  58.  
  59. fam_2::fam_2(const fam_2& fam_in)
  60. {
  61.     set_qty = fam_in.set_qty;
  62.     set_len = fam_in.set_len;
  63.     fam_data = new class fzy_set *[fam_in.set_qty];
  64.  
  65.     for (int i = 0; i < set_qty; i++)
  66.     {
  67.         fam_data[i] = new fzy_set(set_len);
  68.                     *(fam_data[i]) = fam_in[i];
  69.     }
  70. }
  71.  
  72. fam_2& fam_2::operator=(const fam_2& r_value)
  73. {
  74.     auto int i;
  75.  
  76.     if (this != &r_value)
  77.     {
  78.         for (i = 0; i < set_qty; i++)
  79.         {
  80.             delete fam_data[i];
  81.         }
  82.         delete[] fam_data;
  83.         fam_data 
  84.         = new class fzy_set *[r_value.set_qty];
  85.         for (i = 0; i < set_qty; i++)
  86.         {
  87.             fam_data[i] = new fzy_set(r_value.set_len);
  88.             *fam_data[i] = r_value[i];
  89.         }
  90.     }
  91.     return *this;
  92. }
  93.  
  94. fzy_set& fam_2::operator[](const int len)
  95. {
  96.     return ((len >= 0) && (len <= set_qty)) ? 
  97.            **(fam_data + len) : **(fam_data);
  98. }
  99.  
  100. fzy_set& fam_2::operator[](const int len) const
  101. {
  102.     return ((len >= 0) && (len <= set_qty)) ? 
  103.            **(fam_data + len) : **(fam_data); 
  104. }
  105.  
  106. ostream& operator<<(ostream& os, fam_2& z)
  107. {
  108.     os << "(";
  109.     fzy_set **f = z.fam_data;
  110.     int l = z.set_qty - 1;
  111.     for (int i = 0; i < l; i++)
  112.     {
  113.         os << *f[i];
  114.     }
  115.     return os << *f[i] << ")\n";
  116. }
  117.  
  118. fzy_set operator*(const fzy_set &fuzzy_set, 
  119.                   const fam_2 &fam)
  120. {
  121.     auto int set_ctr,
  122.              fuzz_ctr;
  123.     auto fzy_set tmp_set(fam.set_len),
  124.                  new_set(fam.set_qty);
  125.  
  126.     if (fuzzy_set.dimension == fam.set_len)
  127.     {
  128.         for (set_ctr = 0; set_ctr < fam.set_qty;
  129.              set_ctr++)
  130.         {
  131.             for (fuzz_ctr = 0; fuzz_ctr < fam.set_len;
  132.                  fuzz_ctr++)
  133.             {
  134.                 tmp_set[fuzz_ctr] 
  135.                     = fuzzy_set[fuzz_ctr] 
  136.                     & fam[set_ctr][fuzz_ctr];
  137.             }
  138.             new_set[set_ctr] = fzy_set_max(tmp_set);
  139.         }
  140.     }
  141.     return new_set;
  142. }
  143.  
  144.  
  145.